package com.fy.servlet.code;

import java.awt.Font;
import java.awt.Graphics2D;
import java.util.Random;
import javax.servlet.annotation.WebServlet;

/**
 * 验证码工具类（字母）
 * @author 小叶
 * @date 2016年5月20日
 * @version 1.0
 */
@WebServlet("/engcode.do")
public class EnglishCode extends BasicCode {
	private static final long serialVersionUID = 1L;
	/**
	 * 随机生成验证码（字母）
	 * @param g 2D图形变量
	 * @return String 验证码
	 */
	@Override
	public String drawCode(Graphics2D g) {
		Random rand = new Random(); // 创建随机数变量
		StringBuffer sb = new StringBuffer(); // 创建验证码存储变量
		g.setFont(new Font("Arial", Font.CENTER_BASELINE, 24)); // 设置验证码字体格式
		int x = 10, y = 20; // 设置绘制坐标
		for (int i = 0; i < CODE; i++) {
			char cb = (char) (rand.nextInt(25) + 65); // 随机产生A-Z大写字母
			char cs = (char) (rand.nextInt(25) + 97); // 随机产生a-z小写字母
			String[] s = new String[2]; // 创建字符串数组存放上面产生的大小写字母
			s[0] = String.valueOf(cb); // 数组第1个值是大写字母
			s[1] = String.valueOf(cs); // 数组第2个值是小写字母
			String ch = s[rand.nextInt(2)]; // 随机在数组里取一个值
			sb.append(ch); // 添加到验证码存储变量
			int degree = rand.nextInt() % 30; // 设置字体旋转角度
			g.rotate(degree * Math.PI / 180, x, y); // 正向角度
			g.setColor(getRandColor(8, 80)); // 设置验证码颜色
			g.drawString(ch, x, y); // 绘制指定文本字符串
			g.rotate(-degree * Math.PI / 180, x, y); // 反向角度
			x += 20; // 设置间距
		}
		return sb.toString();
	}
}